var http	= require('http');
var express = require('express');// 在 Cloud code 里初始化 Express 框架
var ejs 	= require('ejs');
var fs 		= require('fs');

var cAdmin		= require('cloud/controllers/admin.js');
var cMain		= require('cloud/controllers/main.js');
var cUser		= require('cloud/controllers/user.js');

var avImage 	= AV.Object.extend("Image");

var avosExpressCookieSession = require('avos-express-cookie-session');

var app 	= express(),
	  user	= express(),
	  admin	= express();



ejs.open = '<!--{';
ejs.close = '}-->';
// App 全局配置
app.set('views','cloud/views');   // 设置模板目录
app.engine('.html', ejs.__express);
app.set('view engine', 'html');
app.use(express.bodyParser());    // 读取请求 body 的中间件

user.set('views','cloud/views');   // 设置模板目录
admin.set('views','cloud/views/admin');   // 设置模板目录

//启用cookie
app.use(express.cookieParser('Your Cookie Secure'));
//使用avos-express-cookie-session记录登录信息到cookie。
app.use(avosExpressCookieSession({ cookie: { maxAge: 3600000 },fetchUser: true}));



app.get('/', cMain.homePage);//网站首页

app.post('/uploadImg', function(req,res,next){
	//console.dir(req.files);
	var file = req.files.uploadImg;
	var filetype=file.headers["content-type"].toLowerCase();
    if(typeof(file)=="undefined" && filetype.indexOf('image/')==-1) {
        res.json({success:false,msg:"上传失败，未获取到文件，或文件格式不正确！"});
    }else{
		var imgFile = new AV.File(file.originalFilename, fs.readFileSync(file.path));
		imgFile.save().then(function(){
			var image=new avImage();
			image.set("File",imgFile);
			image.set("url","/images/"+imgFile.id+"."+file.path.split('.').pop());
			image.set("content",req.body.content);
			image.set("title",req.body.title);
			return image.save();
		}).then(function(image){
			res.json({success:true,file_path:image.get("url"),id:image.id});
		}, function(error) {
			res.json({success:false,msg:"上传失败！"});
		});
    }
});

app.get(/^\/(((tmp)|(css))\/)+([a-zA-Z0-9.-_]+(\.html)+)?$/i,cMain.htmlPage);//静态页面

app.get(/^\/([a-zA-Z0-9-_]+(\/view))$/i,cMain.View);//详情页面

app.all(/^\/(ajax)$/i,cMain.Ajax);//ajax

app.get(/^\/([a-zA-Z0-9-_]+)$/i,cMain.Page);//通用页面

//获取.css及.js文件
app.all(/^\/tmp\/views\/([a-zA-Z0-9\.\-]+((.css)|(.js)))?$/i, function(req,res,next){
	res.type(req.params[1]);
	res.sendfile("/tmp/views/"+req.params[0]);
});

//获取字体文件
/*app.get(/^\/(([a-zA-Z0-9\-_])+\/)+fonts\/([a-zA-Z0-9\.\-_]+\.[a-zA-Z0-9_]+)?$/i, function(req,res,next){
	//console.log(req.path);
	var path	= req.path.split("/");
	var fn		= path[path.length-1];
	res.redirect("/fonts/"+fn);
});*/

//获取图片文件
app.get(/^\/(([a-zA-Z0-9\-_])+\/)*images\/([a-zA-Z0-9\.\-_]+\.[a-zA-Z0-9_]+)?$/i, function(req,res,next){
	var path	= req.path.split("/");
	var fn		= path[path.length-1];

	var queryImage=new AV.Query(avImage);
	queryImage.equalTo("url","/images/"+fn);
	//console.log("/images/"+fn);
	queryImage.first(function(image){
		if(typeof(image)!="undefined" && image!=null){
			var file=image.get("File");
			//console.log(file.url());
			res.redirect(file.thumbnailURL(750,360));
		}
	});
});

/*
用户操作
*/
app.use('/user', user);
user.post('/new', cUser.doCreateUser);
user.post('/login', cUser.doLogin);
user.get('/logout', cUser.doLogout);

/*
后台管理
*/
app.get('/admin-login', cAdmin.loginPage);	//登录页面
app.post('/admin-login', cAdmin.doLogin);	//登录帐号
app.get('/admin-logout',cAdmin.doLogout);	//登出帐号
app.get('/getImage',cAdmin.getImage);	//获取图片列表
app.get('/getImageDetail',cAdmin.getImageDetail);	//获取图片列表

app.use('/admin', admin);
admin.use(cAdmin.doCkAuth);					//权限检查

admin.get('/index', cAdmin.indexPage);					//后台索引页面

admin.get('/user/list', cAdmin.userListPage);			//用户列表
admin.get('/user/edit', cAdmin.userDetailPage);			//编辑用户页面
admin.post('/user/new', cAdmin.doCreateUser);			//新增用户
admin.post('/user/setrole', cAdmin.doSetUserRole);		//修改用户角色
admin.post('/user/delete', cAdmin.doDeleteUser);		//用户管理-删除
admin.post('/user/save', cAdmin.doSaveUser);			//用户管理-保存

admin.get('/templet/list', cAdmin.templetListpage);		//模板列表页面
admin.get('/templet/edit', cAdmin.templetDetailPage);	//模版详情页面
admin.post('/templet/save', cAdmin.doSaveTemplet);		//模版管理-保存
admin.post('/templet/delete', cAdmin.doDeleteTemplet);	//模版管理-删除

admin.get('/page/list', cAdmin.pageListpage);			//页面列表页面
admin.get('/page/edit', cAdmin.pageDetailPage);			//页面详情页面
admin.post('/page/save', cAdmin.doSavePage);			//页面管理-保存
admin.post('/page/delete', cAdmin.doDeletePage);		//页面管理-删除

admin.get('/article/list', cAdmin.articleListpage);		//文章列表页面
admin.get('/article/edit', cAdmin.articleDetailPage);	//文章详情页面
admin.post('/article/save', cAdmin.doSaveArticle);		//文章管理-保存
admin.post('/article/delete', cAdmin.doDeleteArticle);	//文章管理-删除

admin.get('/contentGroup/list', cAdmin.contentGroupListpage);	//内容组列表页面
admin.get('/contentGroup/edit', cAdmin.contentGroupDetailPage);	//内容组详情页面
admin.post('/contentGroup/save', cAdmin.doSaveContentGroup);	//内容组管理-保存
admin.post('/contentGroup/delete', cAdmin.doDeleteContentGroup);//内容组管理-删除

admin.get('/image/list', cAdmin.imageListpage);				//内容组列表页面
//admin.post('/image/save', cAdmin.doSaveImage);			//内容组管理-保存
//admin.post('/image/delete', cAdmin.doDeleteImage);		//内容组管理-删除



// 最后，必须有这行代码来使 express 响应 HTTP 请求
app.listen();

app.use(function(req, res, next){
  res.status(404).render('404.html', {title: 'Sorry, page not found'});
});
